第 2 步 - 使用 JavaScript 脚本控制应用程序状态

在本步骤的第一节中,您将学习创建另一个状态机,以设置当用户打开/关闭应用程序时哪些指示灯可见。在本步骤的第二节中,您将学习添加 JavaScript 脚本来定义何时打开/关闭应用程序。

创建状态机以打开/关闭空调应用程序

在本节中,您将学习创建状态机,控制当打开/关闭应用程序时哪些指示灯可见。图像用于显示空调档位指示灯在空调关闭时变为灰色,当空调打开时,第一个档位指示条显示为绿色。

要创建状态机以打开/关闭应用程序:

  1. 素材库 (Library) > 状态机 (State Managers) 中创建状态机,并将其命名为 OnOff Switch
  2. OnOff Switch 中将该状态组重命名为 AC OnOff,将两个状态重命名为 OnOff
  3. 素材库 (Library) > 状态机 (State Managers) > OnOff Switch 中选择 AC OnOff 状态组,并在属性 (Properties) 中将初始状态 (Initial State) 设置为 OnOff Switch/AC OnOff/Off
  4. OnOff 状态中,为应用程序打开/关闭时显示的图像创建状态对象 (State Object)
    例如,命名状态对象 Image
  5. 选择 Image 状态对象并在属性 (Properties) 中添加和设置:

    Levels on 图像包含档位指示条,其中第一条可见,并且Levels off 图像在应用程序关闭时将档位指示条显示为灰色。您设置状态机以显示当应用程序处于 OnOff 状态时的正确图像。

  6. On 状态为每个档位创建状态对象 (State Object),将其命名为 Level 1Level 2Level 3Level 4,并在属性 (Properties) 中:
  7. 素材库 (Library) 中选择 Level 1Level 2Level 3Level 4 状态对象,将其复制粘贴到 Off 状态,并在属性 (Properties) 中禁用可测试命中 (Hit Testable) 属性。
  8. 工程 (Project) 中选择 AirCondition level 节点,在属性 (Properties) 中添加状态机 (State Manager) 属性,将其设为 OnOff Switch
    AirCondition level 节点设置 OnOff Switch 状态机,以控制档位按钮。

预览 (Preview) 中点击指示灯按钮可将其打开。在下一节中,添加 JavaScript 脚本,并设置当所有指示灯按钮关闭时应用程序处于Off 状态。
交互 (Interact) 模式中,您可以像在设备上一样在预览 (Preview) 窗口中与应用程序交互。您使用预览 (Preview) 工具时,在预览 (Preview) 窗口中点击 ,可切换到交互 (Interact) 模式。

使用 JavaScript 脚本控制状态机

在本节中,您将学习在应用程序中添加 JavaScript 脚本,以控制应用程序状态。设置应用程序,当 LegsBodyShield 切换按钮的值更改时执行该脚本。

  1. 工程 (Project) 中选择RootPage 节点,在触发器 (Triggers) 部分的节点组件 (Node Components) 中右键点击并选择添加触发器 (Add Trigger) > 常规 (General) > 属性变更时 (On Property Change)
    Kanzi 会在设定的属性值发生更改时执行属性变更时 (On Property Change) 触发器。
  2. 属性变更时 (On Property Change) 触发器中点击添加 (Add) 下拉菜单并选择执行脚本 (Execute Script) 动作。
    属性变更时 (On Property Change) 触发器设置为关闭,Kanzi 执行在脚本编辑器 (Script Editor) 中选择的脚本。
  3. 执行脚本 (Execute Script) 窗口中选择 + 创建脚本 (+ Create Script) 以创建脚本。
  4. 脚本编辑器 (Script Editor) 中,写入要使用的脚本,以控制当打开/关闭应用程序时哪些指示灯可见。请参阅脚本参考
    例如,使用此脚本:
    //获取BodyLegsShield 切换按钮的切换状态。
    
    var shield = node.lookupNode('./Shield');
    var shieldState = shield.getProperty('ButtonConcept.ToggleState');
    
    var legs = node.lookupNode('./Legs');
    var legsState = legs.getProperty('ButtonConcept.ToggleState');
    
    var body = node.lookupNode('./Body');
    var bodyState = body.getProperty('ButtonConcept.ToggleState');
    
    var stack = node.lookupNode('./AirCondition level');
    
    var levelButtons = node.lookupNode('./AirCondition level/Level buttons');
    
    //当BodyLegsShield 切换按钮状态为 1 时,
    //将 AC OnOff 状态设置为On。如果没有按钮状态为 1,将状态设置为Off,
    //档位按钮状态设置为Level 1。
    
    if (shieldState != 0 || legsState != 0 || bodyState != 0)
    {
        stack.goToState('AC OnOff.On');
    }
    else
    {
        stack.goToState('AC OnOff.Off');
        levelButtons.goToState('Level.1')    
    }
  5. 工程 (Project) 中选择RootPage 节点,在属性变更时 (On Property Change) 触发器的节点组件 (Node Components) 中点击触发器设置 (Trigger Settings),并在触发器设置编辑器 (Trigger Settings Editor) 中设置:

  6. 属性变更时 (On Property Change) 另外增加两个触发器,从第一个属性变更时 (On Property Change) 触发器中复制 执行脚本 (Execute Script) 动作并将其粘贴到每个新的触发器,并在这些触发器的触发器设置编辑器 (Trigger Settings Editor) 中设置:

    为每个 BodyLegsShield 按钮创建触发器。当用户点击其中一个按钮,Kanzi 执行脚本,应用程序检查每个指示灯按钮的状态。点击其中一个按钮可触发应用程序转到 On 状态。当所有按钮关闭,应用程序还将关闭档位指示灯。

预览 (Preview) 中,当您点击任何要打开空调的区域,应用程序打开。一旦应用程序打开,就可以更改档位并打开和关闭其他区域。要关闭空调,关闭BodyShieldLegs 指示灯按钮。


< 上一步

接下来该做什么?

在本教程中,您学习了如何使用状态机控制您的 Kanzi 应用程序。您还学习了如何使用 JavaScript 脚本控制状态机。现在您可以:

另请参阅

状态机

使用脚本

使用状态机

使用状态迁移